home *** CD-ROM | disk | FTP | other *** search
- datalen EQU $8000 ; min: $15a , max $1fffe
-
- INCDIR "include:"
- INCLUDE "exec/types.i"
- INCLUDE "exec/exec_lib.i"
- INCLUDE "exec/libraries.i"
- INCLUDE "exec/strings.i"
- INCLUDE "libraries/dos.i"
- INCLUDE "libraries/dos_lib.i"
- INCLUDE "libraries/dosextens.i"
- INCLUDE "intuition/intuition.i"
- INCLUDE "intuition/intuitionbase.i"
- INCLUDE "intuition/intuition_lib.i"
- INCLUDE "intuition/screens.i"
- INCLUDE "graphics/graphics_lib.i"
- INCLUDE "hardware/custom.i"
- INCLUDE "hardware/dmabits.i"
-
- custom EQU $dff000
-
- ***************************************** FAST WB STARTUP CODE
-
- movea.l a0,a3
- suba.l a1,a1
- movea.l 4.w,a6
- jsr _LVOFindTask(a6)
- movea.l d0,a2
- tst.l pr_CLI(a2)
- bne.s defchan
-
- lea pr_MsgPort(a2),a0 ; wb message
- jsr _LVOWaitPort(a6)
- lea pr_MsgPort(a2),a0
- jsr _LVOGetMsg(a6)
-
- movea.l d0,a4
- jsr defchan
- movea.l a4,a1
-
- movea.l 4.w,a6
- jsr _LVOReplyMsg(a6)
- moveq #RETURN_OK,d0
- rts ; back to wb
-
- ***************************************** GET FIRST 0-3 OCCURRENCE IN CMDLINE
-
- defchan move.l #$00030000+DMAF_AUD3,d3 ; default channel
- getcmd move.b (a3)+,d0
- cmpi.b #"?",d0
- beq help
- cmpi.b #LF,d0
- ble.s kickver
- cmpi.b #"0",d0
- blt.s getcmd
- cmpi.b #"2",d0
- bgt.s getcmd
- andi.w #%11,d0 ; channels 0,1, or 2
- moveq #0,d3
- move.w d0,d3
- swap d3
- bset d0,d3
-
- ***************************************** NEW WINDOW'S dY, dH IF KS 2.0+
-
- kickver cmpi.w #34,LIB_VERSION(a6) ; ks 1.3
- ble.s openint
- addi.w #1,nwindow+nw_TopEdge
- addi.w #1,nwindow+nw_Height
-
- openint moveq #RETURN_FAIL+1,d7 ; returncode = 21 - no int.lib
- lea intname,a1
- moveq #33,d0 ; ks 1.2+
- jsr _LVOOpenLibrary(a6)
- beq fault
- move.l d0,a6
-
- ***************************************** GET WB STRUCTURE
-
- addq.l #1,d7 ; returncode = 22 - wb is closed
- lea auddata,a0
- move.l #sc_SIZEOF,d0
- moveq #WBENCHSCREEN,d1
- jsr _LVOGetScreenData(a6)
- beq clsint
-
- ***************************************** SET WINDOW'S TOP EDGE AND HEIGHT
-
- moveq #0,d0
- move.b auddata+sc_BarHeight,d0
- add.w d0,nwindow+nw_TopEdge
- add.w d0,nwindow+nw_Height
-
- ; move.l auddata+sc_Width,nwindow+nw_MaxWidth
-
- ***************************************** SET WINDOW'S WIDTH
-
- addq.l #1,d7 ; returncode = 23 - no gfx.lib
- movea.l a6,a5
- movea.l 4.w,a6
- lea gfxname,a1
- moveq #33,d0 ; ks 1.2+
- jsr _LVOOpenLibrary(a6)
- beq clsint
-
- move.l d0,a6
- move.l wtitle,a0
- lea auddata+sc_RastPort,a1
- moveq #endwtit-eotitle-1,d0
- jsr _LVOTextLength(a6)
- add.w d0,nwindow+nw_Width
-
- ***************************************** CHECK IF WINDOW'S WIDTH IS OK
-
- move.w nwindow+nw_Width,d0
- cmp.w auddata+sc_Width,d0
- ble.s minwid
- move.w auddata+sc_Width,nwindow+nw_Width
- minwid cmpi.w #83,nwindow+nw_Width
- bgt.s clsgfx
- move.w #83,nwindow+nw_Width
-
- clsgfx movea.l a6,a1
- movea.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
- exg.l a5,a6
-
- ***************************************** BUILD PINK-NOISE SAMPLE
-
- lea auddata,a0
- move.w #datalen-1,d0
- filldat move.b custom+vhposr,d2
- eor.b d2,d1
- move.b custom+vhposr+1,d2
- eor.b d2,d1
- move.b -1(a0),d2
- eor.b d2,d1
- add.b -2(a0),d1
- move.b d1,d2
- andi.w #%1111,d2
- delay dbf d2,delay
- move.b d1,(a0)+
- dbf d0,filldat
-
- ***************************************** PREPARE PAULA'S REGISTERS
-
- lea custom+aud,a0
- swap d3
- move.w d3,d0
- mulu #$10,d0
- swap d3
- setcust move.l #auddata,ac_ptr(a0,d0.w)
- move.w #(datalen/2),ac_len(a0,d0.w)
- move.w #200,ac_per(a0,d0.w)
- move.w #64,ac_vol(a0,d0.w)
-
- ***************************************** OPEN THE WINDOW
-
- addq.l #1,d7 ; returncode = 24 - no window
- lea nwindow,a0
- jsr _LVOOpenWindow(a6)
- beq.s clsint
- movea.l d0,a2
-
- **************************************** PLAY THE SAMPLE
-
- bset #DMAB_SETCLR,d3
- move.w d3,custom+dmacon
-
- **************************************** WAIT THE USER HITS THE CLS_GAD
-
- exg.l a5,a6
- move.l wd_UserPort(a2),a0
- jsr _LVOWaitPort(a6)
- move.l wd_UserPort(a2),a0
- jsr _LVOGetMsg(a6)
- movea.l d0,a1
- jsr _LVOReplyMsg(a6)
- exg.l a5,a6
-
- **************************************** STOP THE SAMPLE
-
- bclr #DMAB_SETCLR,d3
- move.w d3,custom+dmacon
-
- **************************************** FREE ALL RESOURCES
-
- movea.l a2,a0
- jsr _LVOCloseWindow(a6)
-
- moveq #RETURN_OK,d7
- clsint movea.l a6,a1
- movea.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
-
- **************************************** CLEAR BSS (PURE PGM)
-
- fault lea auddata,a0
- move.l #(datalen/4)-1,d0
- pure move.l #0,(a0)+
- dbf d0,pure
-
- lea purepos,a0
- lea nwindow,a1
- move.l (a0)+,(a1)+
- move.l (a0)+,(a1)+
-
- move.l d7,d0
- rts
-
- **************************************** FREE ALL RESOURCES
-
- help moveq #RETURN_FAIL+5,d7 ; returncode = 25 - no dos.lib
- lea dosname,a1
- moveq #33,d0 ; ks 1.2+
- jsr _LVOOpenLibrary(a6)
- beq.s fault
- move.l d0,a6
-
- moveq #RETURN_OK,d7
- jsr _LVOOutput(a6)
- beq.s clsdos
-
- move.l d0,d1
- move.l #wtitle,d2
- move.l #endhelp-wtitle,d3
- move.b #" ",eotitle
- jsr _LVOWrite(a6)
- move.b #EOS,eotitle
-
- clsdos movea.l a6,a1
- movea.l 4.w,a6
- jsr _LVOCloseLibrary(a6)
-
- bra.s fault
-
-
- SECTION pinksample,bss_c
-
-
- DS.B 2
- auddata DS.B datalen
-
-
- SECTION strings,data
-
- purepos DC.W 0,1,84,0
- nwindow DC.W 0,1
- DC.W 84,0
- DC.B 0,1
- DC.L CLOSEWINDOW
- DC.L WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE
- DC.L 0
- DC.L 0
- DC.L wtitle
- DC.L 0
- DC.L 0
- DC.W 0,0,0,0
- DC.W WBENCHSCREEN
-
- DC.B "$VER: "
- wtitle DC.B "PINKnoise V1.00"
- eotitle DC.B EOS,"- by /\/ / /-<",LF
- endwtit ; dummy
-
- DC.B "args: [0|1|2|3]/S - default channel is 3",LF
- ; DC.B "the parser will scan first occurrence of one of the args",LF
- endhelp ; dummy
-
- intname INTNAME
- gfxname GRAFNAME
- dosname DOSNAME
-
- EVEN
- END
-